【コマンドライン】権限・パーミッションの変更 [ chmod ]

【コマンドライン】権限・パーミッションの変更 [ chmod ]

コマンドラインでファイルやディレクトリの権限(パーミッション)を変更するchmodコマンドについて解説します。

検証環境

chmodコマンド

chmodコマンドは“ファイルやディレクトリの権限(パーミッション)を変更するコマンド”です。

基本書式

$ chmod [オプション] [モード] [対象パス]

オプション

主なオプションは次の通りです。

オプション 内容
-R ディレクトリ内のファイルやディレクトリも再帰的に変更

引数

モード

モードは所有者、グループ、その他の権限です。

対象パス

対象パスは権限を変更するファイルまたはディレクトリのパスです。

モードの書式

所有者、グループ、その他に対する読み込み、書き込み、実行の権限を表すモードの書式は2パターンあります。

アルファベット書式

対象(所有者・グループ・その他)と権限をアルファベットで指定する書式です

対象 操作 権限
対象に対応するアルファベット
ユーザー アルファベット
所有者 u
グループ g
その他 o
全て a
操作に対応するアルファベット
操作 アルファベット
追加 +
削除 -
権限に対応するアルファベット
権限 アルファベット
読み込み r
書き込み w
実行 x

例えば、グループ(g)に書き込み(w)と実行(x)の権限を追加(+)する場合は次のようになります。

g+wx

もう1つ例を挙げます。

その他(o)から全て(rwx)の権限を削除(-)する場合は次のようになります。

o-rwx

数字書式

対象(所有者、グループ、その他)の権限を3桁の数字で指定する書式です。

例えば次のような数字になります。

740

1文字目が所有者の権限、2文字目がグループの権限、3文字目がその他の権限です。

この数字は与える権限を数値化し、合算した値です。

権限と数値
権限 数値
読み込み(r) 4
書き込み(w) 2
実行(x) 1

例えば、次のような権限を考えます。

ユーザー 読み込み(r) 書き込み(w) 実行(x)
所有者
グループ ×
その他 × ×

この場合、それぞれの数値は次のようになります。

ユーザー 権限
所有者 7 r(4)+w(2)+x(1)
グループ 5 r(4)+x(1)
その他 4 r(4)

そして、『所有者→グループ→その他』の順番で数値を並べると数字書式の権限になります。

754

逆に数値から逆算して権限を読み解くことも可能です。

例えば、初めの例の740は次のように解釈できます。

ユーザー 数値 読み込み 書き込み 実行
所有者 7
グループ 4 × ×
その他 0 × × ×

サンプル

権限の追加(アルファベットの書式)

$ ls -l
-rw------- 1 hacker staff 0  8月 29 15:10 memo.txt
___ih_hl_start
$ chmod g+rw memo.txt 
___ih_hl_end
$ ls -l
-rw-rw---- 1 hacker staff 0  8月 29 15:10 memo.txt

権限の削除(アルファベットの書式)

$ ls -l
-rw-rw---- 1 hacker staff 0  8月 29 15:10 memo.txt
___ih_hl_start
$ chmod g-rw memo.txt 
___ih_hl_end
$ ls -l
-rw------- 1 hacker staff 0  8月 29 15:10 memo.txt

権限の変更(数字の書式)

$ ls -l
-rw------- 1 hacker staff 0  8月 29 15:10 memo.txt
___ih_hl_start
$ chmod 640 memo.txt 
___ih_hl_end
$ ls -l
-rw-r----- 1 hacker staff 0  8月 29 15:10 memo.txt

再帰的な変更

$ ls -l
drwxrwxr-x 2 hacker staff 4096  8月 29 15:18 sample
$ ls -l sample
-rw-rw-r-- 1 hacker staff 0  8月 29 15:18 testA.txt
-rw-rw-r-- 1 hacker staff 0  8月 29 15:18 testB.txt
-rw-rw-r-- 1 hacker staff 0  8月 29 15:18 testC.txt
___ih_hl_start
$ chmod -R 700 sample
___ih_hl_end
$ ls -l
drwx------ 2 hacker staff 4096  8月 29 15:18 sample
$ ls -l sample
-rwx------ 1 hacker staff 0  8月 29 15:18 testA.txt
-rwx------ 1 hacker staff 0  8月 29 15:18 testB.txt
-rwx------ 1 hacker staff 0  8月 29 15:18 testC.txt

マニュアル

コマンドの仕様(主な処理やオプション・引数など)は環境により異なる場合がございます。

利用環境での仕様は『コマンドのマニュアルを表示する』manコマンド等で確認しましょう。